package com.mycompany.databindingfxml2;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;

public class FXMLController implements Initializable {

    @FXML
    private Label label;

    @FXML
    private void handleButtonAction(ActionEvent event) {
        System.out.println("You clicked me!");
        label.setText("Hello World!");
    }

    @FXML
    private TextField vornameTF;

    private final StringProperty vorname = new SimpleStringProperty("Alexander");

    // Diese Methode wird nach dem Inject aufgerufen!
    public void initialize() {
        // nur vorname kann vornameTF aktualisieren
        // ansonsten kommt eine Exception
        // java.lang.RuntimeException: A bound value cannot be set.
        //vornameTF.textProperty().bind(vorname);

        // oder
        // Beide Seiten aktualisieren sich
        vornameTF.textProperty().bindBidirectional(vorname);
    }

    @FXML
    protected void go(ActionEvent event) {
        vorname.setValue("Peter");

        System.out.println("Stringprop.: " + vorname.getValue());
        System.out.println("Textfeld: " + vornameTF.getText());
    }

    @FXML
    protected void enter(MouseEvent event) {
        vornameTF.setText("Die Maus ist über den Button!");

        System.out.println("Stringprop.: " + vorname.getValue());
        System.out.println("Textfeld: " + vornameTF.getText());
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }
}
